// PIKeyboard.cpp
//

#include "PursuitInput.h"

LPDIRECTINPUTDEVICE8 PI_KeyboardDevice;

PINPUT_API PDRESULT PIInitKeyboard(HWND hWnd)
{
	HRESULT hrCreateDevice = PI_DInput->CreateDevice(GUID_SysKeyboard, &PI_KeyboardDevice, NULL);
	if (FAILED(hrCreateDevice))
	{
		PCErrorDX(hrCreateDevice, "Konnte Tastatur-Eingabe nicht initialisieren!");
		return PDERROR_DINPUTKEYBOARDINIT;
	}

	// Tastatue-Datenformat setzten.
	HRESULT hrSetDataFormat = PI_KeyboardDevice->SetDataFormat(&c_dfDIKeyboard);
	if (FAILED(hrSetDataFormat))
	{
		PCErrorDX(hrSetDataFormat, "Konnte Tastatur Datenformat nicht setzen!");
		return PDERROR_DINPUTKEYBOARDINIT;
	}
	
	// Kooperation setzten. So wird ein nicht exklusiver Zugriff im Vordergrund eingestellt.
	HRESULT hrSetCoopLevel = PI_KeyboardDevice->SetCooperativeLevel(hWnd, DISCL_NONEXCLUSIVE | DISCL_FOREGROUND);
	if (FAILED(hrSetCoopLevel))
	{
		PCErrorDX(hrSetCoopLevel, "Konnte Kooperations-Level der Tastatur nicht festlegen!");
		return PDERROR_DINPUTKEYBOARDINIT;
	}

	return PD_OK;
}

PINPUT_API PDRESULT PIUpdateKeyboard(HWND hWnd)
{
	BYTE aKey[256];

	// Daten abfragen
	HRESULT hrGetState = PI_KeyboardDevice->GetDeviceState(256, aKey);
	if (hrGetState == DIERR_INPUTLOST)
	{ // Zugriff verloren - wieder aufbauen
		PI_KeyboardDevice->Acquire();
	}
	if (FAILED(hrGetState))
	{
		return PDERROR_DINPUTGETKEYSTATE;
	}

	return PD_OK;
}